const express = require('express')
const advRouter = express.Router()
const advListModel = require('../db/model/advListModel')
const {upload, getNowTime} = require('../utils')
const fs = require('fs')
const path = require('path')

// 单纯新增的接口
// advRouter.post('/addAdv', (request, response)=>{
//     // 如何接收一个 formdata 的数据，既有普通表单属性，又有文件信息==》 formidable
//     // 1. 安装 npm i formidable
//     // 2. 引入
//     // 3. 实例化对象，并且传入 配置项  uploadDir上传目录  keepExtensions: 是否保留扩展名
//     const form = new Formidable({
//         uploadDir:path.resolve(__dirname,'../public/upload'),
//         keepExtensions:true
//     });

//     form.parse(request, async (err, fields, files) => {
//         let file = files['advPic']
//         if(file.size===0){
//             // 说明没有传文件，删除upload中的空文件==>fs模块
//             fs.unlinkSync(file.filepath)
//         }else{
//             // 有文件上传
//             fields.advPic = file.newFilename
//             console.log(fields) 
//         }
//         try{
//             await advListModel.create(fields)
//             response.json({
//                 code:0,
//                 msg:'广告添加成功'
//             })
//         }catch(e){
//             response.json({
//                 code:1,
//                 msg:'广告添加失败'
//             })
//         }
//     })
// })

advRouter.post('/addAdv', async (request, response) => {
    let { _id } = request.query
    // 如何接收一个 formdata 的数据，既有普通表单属性，又有文件信息==》 formidable
    // 1. 安装 npm i formidable
    // 2. 引入
    // 3. 实例化对象，并且传入 配置项  uploadDir上传目录  keepExtensions: 是否保留扩展名
    let fields
    try{
        fields = await upload(request,'advPic')
    }catch(e){
        response.json({
            code:1,
            msg:'广告图片上传失败'
        })
    }
    try{
        let msg;
        if (_id) {
            // 编辑操作
            fields.updateTime = getNowTime()
            await advListModel.updateOne({_id},fields)
            msg = '编辑成功'
        } else {
            // 添加操作
            await advListModel.create(fields)
            msg = '添加成功'
        }
        response.json({
            code:0,
            msg
        })

    }catch(e){
        response.json({
            code:1,
            msg:'操作失败'
        })
    }
    
})
/**
 * 获取所有广告列表
 */
advRouter.get('/advList', async (request, response) => {
    // 获取keyword 关键字
    let {keyword,pageIndex} = request.query;
    console.log('pageIndex',pageIndex)
    // console.log(keyword,Boolean(keyword))
    let whereObj = {}
    if(keyword){
        whereObj.advTitle = new RegExp(keyword)
    }
    let pageSize = 3
    // total 总共有几条  ==》 totalPage
    let total = await advListModel.find(whereObj).count();
    // 计算总页数
    let totalPage = Math.ceil(total/pageSize)
    // 跳过几条
    let skipNum = (pageIndex - 1) * pageSize

    // console.log(whereObj)
    let advList = await advListModel.find(whereObj).sort({ advOrder: -1, updateTime: -1 }).skip(skipNum).limit(pageSize).exec()
    response.json({
        code: 0,
        msg: '获取广告列表成功',
        data: { advList,totalPage,pageIndex }
    })
})
/** 
 * 根据id获取广告列表
 *
 */
advRouter.get('/advList/:_id', async (request, response) => {
    let { _id } = request.params
    let adv = await advListModel.findOne({ _id })
    response.json({
        code: 0,
        msg: '获取成功',
        data: { adv }
    })
})
/**
 * 根据id 删除 广告
 * 
 */
advRouter.delete('/advList/:_id', async (request, response)=>{
    let {_id} = request.params
    try{
        // 查询要删除广告的图片地址
        let adv = await advListModel.findOne({_id})
        // 拼接广告图片路径
        let imgPath = path.resolve(__dirname ,'../public/upload',adv.advPic)
        // console.log('imgPath',imgPath);
        // 删除图片文件
        fs.unlinkSync(imgPath)
        await advListModel.deleteOne({_id})
        response.json({
            code:0,
            msg:'删除成功'
        })
    }catch(e){
        response.json({
            code:1,
            msg:'删除失败'
        })
    }
})

module.exports = advRouter